package pdd.pdd2023;


import java.util.Arrays;
import java.util.Scanner;

public class pdd2 {
    /**
     * 多多君最近在研究字符串之间的变换，可以对字符串进行若干次变换操作:
     * <p>
     * 交换任意两个相邻的字符，代价为0。
     * 将任意一个字符a修改成字符b，代价为 |a - b|（绝对值）。
     * 现在有两个长度相同的字符串X和Y，多多君想知道，如果要将X和Y变成两个一样的字符串，需要的最少的代价之和是多少。
     * <p>
     * 时间限制：C/C++ 1秒，其他语言2秒
     * 空间限制：C/C++ 256M，其他语言512M
     * 输入描述：
     * 共三行，第一行，一个整数N，表示字符串的长度。
     * （1 <= N <= 2,000）
     * 接下来两行，每行分别是一个字符串，表示字符串X和Y。
     * （字符串中仅包含小写字母）
     * 输出描述：
     * 共一行，一个整数，表示将X和Y变换成一样的字符串需要的最小的总代价。
     * 示例1
     * 输入例子：
     * 4
     * abca
     * abcd
     * 输出例子：
     * 3
     * 例子说明：
     * 其中一种代价最小的变换方案：
     * 都修改为abcd，那么将第一个字符串X最后一个字符a修改为d，代价为|a - d| = 3。
     * 示例2
     * 输入例子：
     * 4
     * baaa
     * aabb
     * 输出例子：
     * 1
     * 例子说明：
     * 其中一种代价最小的变换方案：
     * 首先将第一个字符串通过交换相邻的字符：baaa -> abaa -> aaba，代价为0。
     * 然后将第二个字符串修改最后一个字符b：|b - a| = 1。
     * 两个字符都修改为aaba，所以最小的总代价为1。
     * 示例3
     * 输入例子：
     * 3
     * abc
     * xyz
     * 输出例子：
     * 69
     */

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        String str1 = scanner.next();
        String str2 = scanner.next();

        char[] charArray1 = str1.toCharArray();
        char[] charArray2 = str2.toCharArray();
        //将两个数组排序
        Arrays.sort(charArray1);
        Arrays.sort(charArray2);
        int cost = 0;
        for (int i = 0; i < num; i++) {

            //比较大小，如果charArray[2]大，就将其互换
            if (charArray1[i] < charArray2[i]) {
                char temp = charArray1[i];
                charArray1[i] = charArray2[i];
                charArray2[i] = temp;
            }
            cost += charArray1[i] - charArray2[i];
        }
        System.out.println(cost);

    }
}
